home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / ffccflow / ffccflow.lha / ffccc+flow / ffccc / floppy.f < prev    next >
Text File  |  1992-07-31  |  8KB  |  223 lines

  1.       PROGRAM FLOPPY
  2. C-------------------------------------------------------------------------
  3. C Floppy UNIX interface routine.
  4. C Sets up various required input files for Floppy.
  5. C Julian Bunn 1990
  6. C-------------------------------------------------------------------------
  7.       PARAMETER (MLEN=256,MXLIN=80,maxarg=100)
  8.       character*(mxlin) argval
  9.       character*1 key,char
  10.       CHARACTER*(MLEN)  CFILE,COLD,CFORT,CTEMP,CBAD,CTREE
  11.       LOGICAL LOG,fexist,fold,fqold,tidy,tree
  12. c
  13. c get all arguments
  14. c
  15.       numargs = iargc()
  16.       if(numargs.gt.maxarg) then
  17.          write(6,'(A)') ' Floppy --> Too many arguments '
  18.          goto 900
  19.       endif
  20. c
  21. c get target filename(s)
  22. c
  23.       call getarg(numargs,cfile)       
  24.       lfile = index(cfile,' ')-1
  25.       write(6,'(A)') ' Floppy --> Target file '//cfile(:lfile)
  26.       inquire(file=cfile(:lfile),exist=fexist)
  27.       if(.not.fexist) then
  28.         write(6,'(A)') ' Floppy --> Target file not found !'
  29.         goto 900
  30.       endif
  31. c
  32.       log = .false.                          
  33.       fold = .false.  
  34.       tidy = .false.
  35.       cfort = ' '
  36.       ctree = ' '
  37.       tree = .false.
  38. c
  39.       do 400 iarg=1,numargs-1
  40.          call getarg(iarg,argval)
  41.          if(argval(:2).eq.'-l') log = .true.
  42.          if(argval(:2).eq.'-o') fqold = .true.
  43.          if(argval(:2).eq.'-o') cold = argval(3:)
  44.   400 continue
  45. c
  46.       cbad = 'scratch'
  47.       open(7,status='scratch',err=999)
  48.       WRITE(7,'(A)') 'LIST,GLOBAL,TYPE;'
  49.       WRITE(7,'(A)') 'PRINT,ILLEGAL;'
  50.       WRITE(7,'(A)') 'OPTIONS,USER;'
  51.       if(fqold) then
  52.         if(cold(1:1).eq.' ') cold = cfile(:lfile)//'.flopold'
  53.         lold = index(cold,' ')-1
  54.         inquire(file=cold(:lold),exist=fold)
  55.         if(log) write(6,'(A)') ' Floppy --> Old file: '//cold(:lold)
  56.         if(.not.fold) then
  57.            write(6,'(A)') ' Floppy --> Old file not found !'
  58.            goto 900
  59.         endif
  60.         cbad = cold
  61.         open(15,file=cold,status='old',err=999)
  62.   450   read(15,'(A)',end=451,err=999) ctemp      
  63.         goto 450
  64.   451   continue
  65.       else
  66.         cold = cfile(:lfile)//'.flopold'     
  67.         lold = index(cold,' ')-1
  68.         cbad = cold
  69.         open(15,file=cold(:lold),status='unknown',err=999)
  70.       endif
  71. c
  72. c loop over all qualifiers
  73. c
  74.       icheck = 0
  75.       do 500 iarg = 1,numargs-1
  76.          call getarg(iarg,argval)
  77.          larg = index(argval,' ')-1 
  78.          key = argval(2:2)
  79.          if(key.eq.'l') then
  80.            log = .true.
  81.          else if(key.eq.'n') then
  82.            if(argval(3:3).eq.' ') then
  83.               write(6,'(A)') ' Floppy --> Missing value for -n'
  84.               goto 900
  85.            endif 
  86.            cfort = argval(3:)
  87.            lfort = index(cfort,' ')-1 
  88.            if(log) write(6,'(A)') ' Floppy --> Tidied Fortran: '//
  89.      &             cfort(:lfort) 
  90.          else if(key.eq.'o') then
  91. c
  92.          else if(key.eq.'f') then
  93.            if(log) write(6,'(A)') ' Floppy --> List source line numbers'
  94.            write(15,'(a)') '*FULL'
  95.          else if(key.eq.'i') then
  96.            ctemp = argval(3:)
  97.    50      iend = index(ctemp,',')
  98.            if(iend.ne.0) then
  99.              write(15,'(A)') ctemp(:iend-1)
  100.              if(log) write(6,'(A)') 
  101.      &         ' Floppy --> Ignore: '//ctemp(:iend-1) 
  102.              ctemp = ctemp(iend+1:)
  103.              goto 50
  104.            endif
  105.            iend = index(ctemp,' ')
  106.            write(15,'(A)') ctemp(:iend)
  107.            if(log) write(6,'(A)') ' Floppy --> Ignore: '//ctemp(:iend)
  108.          else if(key.eq.'c') then
  109.            icheck = 1
  110.            ctemp = argval(3:)
  111.            if(ctemp.eq.'standard') then
  112.              write(15,'(A)') '*CHECK RULE *'
  113.              if(log) write(6,'(A)') ' Floppy --> Check Standard rules'
  114.            else if(ctemp.eq.' ') then
  115.              write(15,'(A)') '*CHECK RULE *'
  116.              if(log) write(6,'(A)') ' Floppy --> Check Standard rules'
  117.            else if(ctemp.eq.'a') then
  118.               write(15,'(A)') '*CHECK RULE 99'
  119.               if(log) write(6,'(A)') ' Floppy --> Check all rules'
  120.            else if(ctemp.eq.'n') then
  121.              write(15,'(A)') '*CHECK RULE -99'
  122.               if(log) write(6,'(A)') ' Floppy --> No rule checks'
  123.            else 
  124.              ctemp = ctemp(:index(ctemp,' ')-1)
  125.              if(log) write(6,'(A)') ' Floppy --> Check rules: '//
  126.      &               ctemp(:index(ctemp,' ')-1)
  127.    51        iend = index(ctemp,',')
  128.              if(iend.ne.0) then
  129.                write(15,'(A)') '*CHECK RULE '//ctemp(:iend-1)
  130.                ctemp = ctemp(iend+1:)
  131.                goto 51
  132.              endif
  133.              write(15,'(A)') '*CHECK RULE '//ctemp
  134.            endif 
  135.          else if(key.eq.'t') then
  136.            write(7,'(A)') 'OPTIONS,TREE;'
  137.            ctree = cfile(:lfile)//'.floptre'
  138.            ltree = index(ctree,' ')-1
  139.            if(log) write(6,'(A)') 
  140.      &             ' Floppy --> Produce file for Flow: '//ctree(:ltree)
  141.            open(50,file=ctree(:ltree),status='new',
  142.      &          form='unformatted',err=999)
  143.            tree = .true.
  144.          else if(key.eq.'j') then
  145.            char = argval(3:3)
  146.            if(char.eq.' ') char = '3'
  147.            write(7,'(A)') 'OPTIONS,INDENT='//char//';'
  148.            if(log) write(6,'(A)') ' Floppy --> Indent clauses by '//char
  149.            tidy = .true.
  150.          else if(key.eq.'f') then
  151.            write(7,'(A)') 'STATEMENTS,SEPARATE;'
  152.            if(log) write(6,'(A)') ' Floppy --> Group FORMATs at end'
  153.            tidy = .true.
  154.          else if(key.eq.'g') then
  155.            write(7,'(A)') 'STATEMENTS,GOTO;'
  156.            if(log) write(6,'(A)') ' Floppy --> Right align GOTOs'
  157.            tidy = .true.
  158.          else if(key.eq.'r') then
  159.            ctemp = argval(3:)
  160.            iend = index(ctemp,',')
  161.            if (iend.eq.0) ctemp = ctemp(:index(ctemp,' ')-1)//',10'
  162.            write(7,'(A)') 'STATEMENTS,FORMAT='//
  163.      &                    ctemp(:index(ctemp,' ')-1)//';'
  164.            if(log) write(6,'(A)') ' Floppy --> Renumber FORMATs: '//
  165.      &             'start,step '//ctemp(:index(ctemp,' '))
  166.            tidy = .true.
  167.          else if(key.eq.'s') then
  168.            ctemp = argval(3:)
  169.            iend = index(ctemp,',')
  170.            if (iend.eq.0) ctemp = ctemp(:index(ctemp,' ')-1)//',10'
  171.            write(7,'(A)') 'STATEMENTS,NUMBER='//
  172.      &                    ctemp(:index(ctemp,' ')-1)//';'
  173.            if(log) write(6,'(A)') ' Floppy --> Renumber statements: '//
  174.      &             'start,step '//ctemp(:index(ctemp,' '))
  175.            tidy = .true.
  176.          else 
  177.            write(6,'(A)') ' Floppy --> Unrecognized qualifier '//key
  178.          endif
  179.   500 continue
  180. c
  181.       if(tidy) then
  182.          write(7,'(A)') 'OUTPUT,FULL,COMPRESS;'
  183.          if(cfort(1:1).eq.' ') then
  184.            cfort = cfile(:lfile)//'.out'
  185.            lfort = index(cfort,' ')-1
  186.          endif
  187.          cbad = cfort
  188.          open(14,file=cfort(:lfort),status='unknown',err=999)
  189.       endif 
  190. c
  191. c default action is to check standard rules
  192. c
  193.       if(icheck.eq.0.and..not.fqold) then
  194.          write(15,'(A)') '*CHECK RULE *'
  195.       endif
  196.          
  197.       write(7,'(A)') 'END;'
  198.       if(log) write(6,'(A)') ' Floppy --> Finished parsing command' 
  199.       rewind(7)
  200.       rewind(15)
  201.       cbad = cfile
  202.       open(11,file=cfile(:lfile),status='old',err=999)
  203.       cbad = 'scratch'
  204.       open(99,status='scratch',err=999)
  205. c
  206.       call allpro
  207. c
  208.       close(11)
  209.       if(tidy) close(14)
  210.       if(tree) close(50)
  211.       close(7)
  212.       close(99)
  213.       write(6,'(A)') ' Floppy --> has finished'
  214.       goto 2000
  215. C
  216.   999 CONTINUE
  217.       WRITE(6,'(A)') ' Floppy --> Error opening '//
  218.      &               cbad(:index(cbad,' ')) 
  219.   900 write(6,'(A)') ' Floppy aborted'     
  220.  2000 CONTINUE
  221.       END
  222.